Today, software development tools allow software developers the ability to build executable components using one or more programming languages, such as C, C++, C#, and the like. One advantage for building executable components is that the components, once built, may be re-used by other software programs. Another advantage for building executable components is that new components may be easily extended from existing components.
Generally, components are extended by subclassing, which means deriving a new class from an existing class. These classes and subclasses are written using one of the programming languages. The code that is written is commonly referred to as source code. For traditional runtime environments, the software development tools compile the source code into object code and then link multiple object codes together to create an executable. However, one of the problems with these traditional runtime environments is that each programming language and each version of the programming language require a different runtime environment.
To overcome this problem, a new type of runtime environment has been designed that effectively eliminates many of the cross-language interface and language version problems of the traditional runtime environments. In this new type of runtime environment, development tools compile the source code into an intermediate language. During runtime, the runtime environment compiles the intermediate language into native binary executable code. Thus, the new runtime environment performs the “linking-type” process during runtime. In order to perform this “linking-type” process, the runtime environment reads information (e.g., metadata) and accesses IL assemblies for the components associated with the program that is being run. The metadata includes descriptions for types, versions, resources, and the like. The IL assemblies may be a single dynamic link library (DLL), or numerous DLLs and resources.
For both the traditional and the new type of runtime environment, the source code is written using a programming language. Each programming language has its own unique syntax and set of application programming interfaces (API) specific to the runtime environment. In order for a software developer to write source code, the developer must learn the syntax of the programming language and the APIs associated with the runtime environment. Learning the syntax and APIs is very time consuming and challenging. In addition, if a developer wishes to program using multiple programming languages and/or different runtime environments, the developer must remember the similarities and the subtle differences between each of the programming language's syntax and the APIs for the various runtime environments.
Given the advantages of using components, there is a need for a better mechanism for building, extending, and using components.